package com.twelvet.api.system.domain;

import com.twelvet.framework.core.application.domain.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.io.Serial;
import java.util.ArrayList;
import java.util.List;

/**
 * @author twelvet
 * @WebSite twelvet.cn
 * @Description: 部门表 sys_dept
 */
@Schema(description = "部门表")
public class SysDept extends BaseEntity {

	@Serial
	private static final long serialVersionUID = 1L;

	/**
	 * 部门ID
	 */
	@Schema(description = "部门ID")
	private Long deptId;

	/**
	 * 父部门ID
	 */
	@Schema(description = "父部门ID")
	private Long parentId;

	/**
	 * 祖级列表
	 */
	@Schema(description = "祖级列表")
	private String ancestors;

	/**
	 * 部门名称
	 */
	@Schema(description = "部门名称")
	private String deptName;

	/**
	 * 显示顺序
	 */
	@Schema(description = "显示顺序")
	private Long orderNum;

	/**
	 * 负责人
	 */
	@Schema(description = "负责人")
	private String leader;

	/**
	 * 联系电话
	 */
	@Schema(description = "联系电话")
	private String phone;

	/**
	 * 邮箱
	 */
	@Schema(description = "邮箱")
	private String email;

	/**
	 * 部门状态:0正常,1停用
	 */
	@Schema(description = "部门状态")
	private String status;

	/**
	 * 删除标志（0代表存在 2代表删除）
	 */
	@Schema(description = "删除标志")
	private String delFlag;

	/**
	 * 父部门名称
	 */
	@Schema(description = "父部门名称")
	private String parentName;

	/**
	 * 子部门
	 */
	@Schema(description = "子部门")
	private List<SysDept> children = new ArrayList<>();

	public Long getDeptId() {
		return deptId;
	}

	public void setDeptId(Long deptId) {
		this.deptId = deptId;
	}

	public Long getParentId() {
		return parentId;
	}

	public void setParentId(Long parentId) {
		this.parentId = parentId;
	}

	public String getAncestors() {
		return ancestors;
	}

	public void setAncestors(String ancestors) {
		this.ancestors = ancestors;
	}

	@NotBlank(message = "部门名称不能为空")
	@Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
	public String getDeptName() {
		return deptName;
	}

	public void setDeptName(String deptName) {
		this.deptName = deptName;
	}

	public Long getOrderNum() {
		return orderNum;
	}

	public void setOrderNum(Long orderNum) {
		this.orderNum = orderNum;
	}

	public String getLeader() {
		return leader;
	}

	public void setLeader(String leader) {
		this.leader = leader;
	}

	@Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	@Email(message = "邮箱格式不正确")
	@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getDelFlag() {
		return delFlag;
	}

	public void setDelFlag(String delFlag) {
		this.delFlag = delFlag;
	}

	public String getParentName() {
		return parentName;
	}

	public void setParentName(String parentName) {
		this.parentName = parentName;
	}

	public List<SysDept> getChildren() {
		return children;
	}

	public void setChildren(List<SysDept> children) {
		this.children = children;
	}

	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("deptId", getDeptId())
			.append("parentId", getParentId())
			.append("ancestors", getAncestors())
			.append("deptName", getDeptName())
			.append("orderNum", getOrderNum())
			.append("leader", getLeader())
			.append("phone", getPhone())
			.append("email", getEmail())
			.append("status", getStatus())
			.append("delFlag", getDelFlag())
			.append("createBy", getCreateBy())
			.append("createTime", getCreateTime())
			.append("updateBy", getUpdateBy())
			.append("updateTime", getUpdateTime())
			.toString();
	}

}
